// pages/pay/index.js
import { axios } from "../../request/myAxios"
import regeneratorRuntime from "../../lib/runtime"
Page({

  /**
   * 页面的初始数据
   */
  data: {
    cart: [],
    totalmoney: 0,
    totalCount: 0,
    userAddressObj: {}


  },


  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    //获取本地的地址信息
    const userAddressObj = wx.getStorageSync('userAddress');
    //更新视图的地址信息
    //  从本地获取cart数据
    const cart = wx.getStorageSync('cart');
    this.setData({
      cart,
      userAddressObj
    })
    this.clacTotalMoney(cart);


  },
  clacTotalMoney(cart) {
    // 遍历cart数组
    let totalmoney = 0, //总金额
      totalCount = 0; //选中的总个数
    cart.forEach(element => {
      if (element.selected) {
        totalmoney += element.goods_price * element.number;
        totalCount++;
      }
    });
    //将总价格和总数量进行更新
    this.setData({
      totalmoney,
      totalCount
    })
  },
  getUserAddress() {
    // 1. true 已经授权
    // 2. false 拒绝授权
    // 3. undefined 未曾用用过某个需授权的接口。
    wx.getSetting({
      success: (result) => {
        // console.log("result", result);
        const scopeAddress = result.authSetting["scope.address"];  //用对象的中括号的形式取出数据
        if (scopeAddress || scopeAddress === undefined) {
          // 1.0已经授权  true  或者undefined
          //调动收货地址接口 `wx.chooseAddress()`。
          wx.chooseAddress({
            success: (result) => {
              console.log("result", result);
              const { provinceName, cityName, countyName, detailInfo, telNumber, userName } = result;
              //拼接数据
              let userAddressObj = {
                telNumber,
                userName,
                detail: provinceName + cityName + countyName + detailInfo
              }
              //更新data中的数据
              this.setData({
                userAddressObj
              })
              //为了保持数据，页面一显示的时候，就渲染出地址信息，进行本地存储
              wx.setStorageSync('userAddress', userAddressObj);

            },
            fail: (err) => {
              console.log(err);
            },

          });

        } else {
          // 2.0拒绝授权，打开设置权限页面
          wx.openSetting();

        }
      },

    });

  },
  async JumpPageOrder() {
    // 1.0 判断用户有没有收货地址
    // 2.0 判断用户有没有登录
    const { userAddressObj } = this.data;
    if (!userAddressObj.userName) {
      wx.showToast({
        title: '请选择收货人',
        icon: 'none',
        mask: true
      });
    }
    //判断用户是否登录
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 500,
        mask: true,
        success: (result) => {
          // 跳转到授权页面
          wx.navigateTo({
            url: "/pages/auth/index"
          });

        },

      });

    } else {
      //有token，跳转到订单页面
      // wx.requestPayment(OBJECT)
      // 1.0 先创建订单，获取订单编号order_number
      // 2.0 然后进行支付，支付成功后跳转到订单页面
      //创建订单
      const { totalmoney, userAddressObj, cart } = this.data;
      //遍历数组，拿到goods
      let goods = [];
      cart.forEach(item => {
        if (item.selected) {
          goods.push(
            {
              goods_id: item.goods_id,
              goods_number: item.number,
              goods_price: item.goods_price
            }
          )
        }
      })
      console.log("选中的商品", goods);
      try {
        // 4.1 创建订单 获取订单编号
        const result = await axios({
          url: "/my/orders/create",
          method: "POST",
          data: {
            order_price: totalmoney,  //订单总金额
            consignee_addr: userAddressObj.detail,  //收获地址
            goods   //订单数组
          }
        });
        console.log("订单数据", result);
        //解构订单编号
        const { order_number } = result;
        //通过订单号生成微信支付需要的的参数对象pay
        const { pay } = await axios({
          url: "/my/orders/req_unifiedorder",
          method: 'POST',
          data: {
            order_number
          }
        });
        console.log("订单支付成功", pay);
        //调用微信支付接口，进行付款
        await wx.requestPayment(pay);
        // 问下服务器是否收到钱，如果收到钱，就更新订单列表  订单查询
        const res = await axios({
          url: "/my/orders/chkOrder",
          method: "POST",
          data: {
            order_number
          }
        });
        console.log("支付完成", res);
        //支付成功后的处理
        this.payOrderSuccess();

      } catch (error) {
        wx.showToast({
          title: '支付失败，请稍后重试',
          icon: 'none',
          mask: true
        });
        console.log(error);
      }
    }
  },
  payOrderSuccess() {
    //清除本地选中的商品
    const { cart } = this.data;
    let newcart = [];
    // cart.forEach(item => {
    //   if (!item.selected) {
    //     newcart.push(item);
    //   }
    // })
    // 第二种方法
    newcart = cart.filter(item => !item.selected);

    console.log("新的购物车数组", newcart);
    //将删除数据后的商品数据存到本地
    wx.setStorageSync('cart', newcart);
    //跳转到order订单页面,不能返回，这里要用redirectTo,关闭当前页面，跳转到订单页，替换为order页面，返回到购物车页面
    wx.redirectTo({
      url: '/pages/order/index'
    });
  }


})